﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;
using vudu.Logica.Excepciones;
using vudu.EnlaceDatos.SqlServer;

namespace vudu.PaginasWeb.G5Materia
{
    public partial class ModificarHorarioSeccion : System.Web.UI.Page
    {
        private List<Salon> salones;
        private SeccionMateria seccion;
        private DateTime ini, fin;
        private String _inicio, _fin, _dia, _error;
        private List<HorarioDeClase> horarios;
        int horaisel, horafsel;

        protected void Page_Load(object sender, EventArgs e)
        {
            //OBJETO SESSION 
            string miRol = (string)Session["rol"];
            if (miRol != "Escuela")
                Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");
            Escuela esc = (Escuela)Session["Usuario"];
            nombreEscuela.Text = "Escuela: " + esc.NombreEscuela;

            _error = "Operacion Fallida: ";
            seccion = (SeccionMateria)Session["ModificarHorarioSeccionMateria"];
            horarios = new List<HorarioDeClase>();
            horarios = new SqlServerHorarioClase().ConsultarTodosLosHorariosDeSeccion(seccion.IdSeccionMateria.ToString());
            try
            {
                horaisel = cargarIndexInicio(horarios.ElementAt(0).HoraInicio.ToString("HH:mm"));
                horafsel = cargarIndexFin(horarios.ElementAt(0).HoraFin.ToString("HH:mm"));
            }
            catch
            {
                LabelError.Text = "Operacion Fallida: Esta materia no tiene horarios que modificar";
                LabelError.Visible = true;
                LabelError.ForeColor = System.Drawing.Color.Red;
                LabelError.CssClass = "transaccionFallida";
                DropDownList2.Items.Add("Dias");
            }
            salones = new List<Salon>();
            salones = new SqlServerSalon().ConsultarTodosLosSalones();
            if (!IsPostBack)
            {
                try
                {
                    //materia = (Materia)Session["ModificarMateria"];
                    textSec.Text = seccion.Materia.Nombre + " Profesor(a): " + seccion.Profesor.Nombre + " " + seccion.Profesor.Apellido + " seccion: " + seccion.Codigo.ToString();
                    cargarSalones();
                    cargarDias();
                    HoraInicioLunes.SelectedIndex = horaisel - 1;
                    HoraFinLunes.SelectedIndex = horafsel - 1;
                    int salonsel = cargarIndexSalon(0);
                    SalonLunes.SelectedIndex = salonsel - 1;
                }
                catch (Exception)
                {
                    LabelError.Text = "Operacion Fallida: Esta materia no tiene horarios que modificar";
                    LabelError.Visible = true;
                    LabelError.CssClass = "transaccionFallida";
                    LabelError.ForeColor = System.Drawing.Color.Red;
                    DropDownList2.Items.Add("Dias");
                    BotonConsulta.Visible = false;
                    BotonAceptar.Visible = false;
                }
            }
        }

        public int cargarIndexInicio(String horaInicio)
        {
            int index = 0;
            foreach (ListItem p in HoraInicioLunes.Items)
            {
                index++;
                if (p.Text.Equals(horaInicio))
                    return index;
            }
            return 0;
        }

        public int cargarIndexFin(String horaFin)
        {
            int index = 0;
            foreach (ListItem p in HoraFinLunes.Items)
            {
                index++;
                if (p.Text.Equals(horaFin))
                    return index;
            }
            return 0;
        }

        public int cargarIndexSalon(int indx)
        {
            int index = 0;
            foreach (Salon p in salones)
            {
                index++;
                if (p.NumeroSalon == horarios.ElementAt(indx).SalonDeClase.NumeroSalon)
                    return index;
            }
            return 0;
        }

        private void cargarDias()
        {
            DropDownList2.DataSource = horarios;
            DropDownList2.Items.Clear();
            foreach (HorarioDeClase hor in horarios)
            {
                DropDownList2.Items.Add(hor.Dia);
            }
        }

        private void cargarSalones()
        {
            SalonLunes.DataSource = salones;
            foreach (Salon sal in salones)
            {
                SalonLunes.Items.Add(sal.NumeroSalon + " " + sal.Nombre);
            }
        }

        protected void BotonAnterior_Click(object sender, EventArgs e)
        {
            Response.Redirect("SeleccionarMateriaHorarioModificar.aspx");
        }

        public HorarioDeClase elActual()
        {
            foreach (HorarioDeClase h in horarios)
            {
                if (h.Dia.Equals(DropDownList2.Text))
                    return h;
            }
            return null;
        }

        protected void BotonAceptar_Click(object sender, EventArgs e)
        {
            List<HorarioDeClase> horariosSec = new SqlServerHorarioClase().ConsultarTodosLosHorariosDeSeccion(seccion.IdSeccionMateria.ToString());
            HorarioDeClase aModificar = elActual();
            List<String[]> modificaciones = new List<String[]>();
            bool _seModifica = true;
            ini = DateTime.Parse(HoraInicioLunes.Text);
            fin = DateTime.Parse(HoraFinLunes.Text);
            _dia = DropDownList2.Text;
            String[] picarSal = SalonLunes.Text.Split(' ');
            String idSalon = picarSal[0];
            //Validar hora Inicio

            if (ini.Equals(aModificar.HoraInicio) == false)
            {
                String[] hInicio = new String[3];
                hInicio[1] = "HoraInicio";
                hInicio[2] = ini.ToString("HH:mm");
                modificaciones.Add(hInicio);
            }
            //Validar hora Fin

            if (fin.Equals(aModificar.HoraFin) == false)
            {
                String[] hFin = new String[3];
                hFin[1] = "HoraFin";
                hFin[2] = fin.ToString("HH:mm");
                modificaciones.Add(hFin);
            }
            //Validar que las horas concuerden

            if (DateTime.Compare(ini, fin) >= 0)
            {
                _seModifica = false;
                _error = _error + "No concuerdan las horas";
            }
            //Validar dia

            if (_dia.Equals(aModificar.Dia) == false)
            {
                foreach (HorarioDeClase h in horariosSec)
                {
                    if (h.Dia.Contains(_dia))
                    {
                        _seModifica = false;
                        _error = _error + "Ya hay un horario asignado para este dia";
                    }
                }
                String[] dia = new String[3];
                dia[1] = "Dia";
                dia[2] = _dia;
                modificaciones.Add(dia);
            }
            //Validar Salon

            if (idSalon.Equals(aModificar.SalonDeClase.NumeroSalon.ToString()) == false)
            {
                String[] salon = new String[3];
                salon[1] = "Salon";
                salon[2] = idSalon;
                modificaciones.Add(salon);
            }
            //Realizar Modificaciones
            if (_seModifica == true)
            {
                if (modificaciones.Count > 0)
                {
                    bool seModifico = new SqlServerHorarioClase().ModificarHorarioSeccion(modificaciones, aModificar);
                    if (seModifico == true)
                    {
                        LabelError.Text = "Se han realizado las modificaciones con exito";
                        LabelError.ForeColor = System.Drawing.Color.Green;
                        //Label6.CssClass = "transaccionExitosa";
                        LabelError.Visible = true;
                    }
                    else
                    {
                        LabelError.Text = _error + "No se ha logrado ralizar la modificacion";
                        LabelError.ForeColor = System.Drawing.Color.Red;
                        //Label6.CssClass = "transaccionFallida";
                        LabelError.Visible = true;
                    }
                }
                else
                {
                    LabelError.Text = _error + "No se ha modificado ningun campo";
                    LabelError.ForeColor = System.Drawing.Color.Red;
                    //Label6.CssClass = "transaccionFallida";
                    LabelError.Visible = true;
                }
            }
            else
            {
                LabelError.Text = _error + "Existen errores en la informacion";
                LabelError.ForeColor = System.Drawing.Color.Red;
                //Label6.CssClass = "transaccionFallida";
                LabelError.Visible = true;
            }
        }

        protected void SeleccionarSeccion_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void SalonLunes_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void HoraInicioLunes_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void HoraFinLunes_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void BotonConsulta_Click(object sender, EventArgs e)
        {
            String diaSeleccionado = DropDownList2.Text;
            int posicion = 0;
            foreach (HorarioDeClase h in horarios)
            {
                if (h.Dia.Equals(diaSeleccionado))
                    break;
                posicion++;
            }
            horaisel = cargarIndexInicio(horarios.ElementAt(posicion).HoraInicio.ToString("HH:mm"));
            horafsel = cargarIndexFin(horarios.ElementAt(posicion).HoraFin.ToString("HH:mm"));
            HoraInicioLunes.SelectedIndex = horaisel - 1;
            HoraFinLunes.SelectedIndex = horafsel - 1;
            int salonsel = cargarIndexSalon(posicion);
            SalonLunes.SelectedIndex = salonsel - 1;
        }
    }
}